A computing device typically executes software referred to as an “operating system” to provide an environment in which programs or other executables, generally referred to as “software applications,” may execute. The operating system manages the hardware resources of the computing device, and typically presents what is referred to as an application programming interface (API) with the software applications interact to utilize the underlying hardware resources provided by the computing devices. The hardware resources typically include storage devices (e.g., hard drives, compact disc drives, and digital video disc drives), memories (e.g., random access memory, dynamic random access memory, and static random access memory), graphics cards, card readers, printers, keyboards, mice, network interfaces or any other type of hardware provided by or included within computing devices. The applications generally invoke one or more functions provided by the API to access this hardware through the operating system. The operating system generally manages any interrupts, exceptions and faults that result from such function calls and otherwise acts as an intermediary between the applications and the underlying hardware.
To provide the applications access to data stored to memories and storage devices, the operating system typically includes internal software that provides one or more file systems. A file system is a logical construct that defines the manner in which data is stored on media, such as permanent storage devices accessible to the computing system. Typically, the file system components of the operating system operates on discrete portions of data referred to as files and organizes these files into a hierarchical structure for the storage, organization, manipulation and retrieval by the operating system. The hierarchical structure is generally defined in terms of directories (or so-called “folders”) and sub-directories (so-called “sub-folders”). The file system maps various physical areas of the underlying storage devices to the directories and sub-directories of the hierarchical structure and defines which areas are used to store which files and which areas are currently available to store additional files. For example, the file system may store data mapping at least a portion of a file to a particular sector of a hard drive, as well as, other metadata defining the file name, date of file creation, size of the file, and the like.
While operating systems are carefully constructed to provide a secure and consistent operating environment for the software applications, the operating system may experience faults that crash or otherwise prevent successful execution of the operating system. Faults that occur in the file system, for example, due to software errors or so-called “bugs” in the program code providing the file system of the operating system or transient faults in the device hardware, generally lead to total failure of the entire operating system as a result of the importance of the file system to stable execution of the operating system. To illustrate, a fault in the file system code may impact the mapping of data to areas of the memories and storage devices, which may effectively lead to loss of data. Consequently, in response to file system faults or other failures, if handled gracefully, the operating system typically, if handled gracefully, requests that the computing device be restarted to overcome the failure or, if not well handled, shuts down without much in the way of warning, forcing a restart of the computing device. This forced shutdown or restart impacts the usability of the computing device. In addition, the current state of software applications being executed by the operating system, as well as, some incremental user data not yet written to the storage devices may be lost. The operating system may attempt data recovery operations in an attempt to recover this lost application state data and incremental user data but these recovery operations are usually only partially successful.